﻿namespace DesignModeConsole.结构型.组合模式;

/// <summary>
/// 组合模式
/// </summary>
internal class ComposeService : IService
{
    public void Main()
    {
        // 需求：设计一个类来表达文件系统中的目录，能够方便实现以下功能
        // 动态添加、删除某一个目录下的子目录或者文件
        // 统计指定目录下的文件个数
        // 统计指定目录下的文件总大小

        //重构前

        //var rootSystem = new FileSystemMode("D:\\Downloads", false);
        //var file1 = new FileSystemMode("D:\\Downloads\\大话设计模式(带目录完整版).pdf", true);
        //rootSystem.AddSubNode(file1);

        //var count = rootSystem.CountNumOfFiles();
        //var size = rootSystem.CountSizeOfFiles();

        // 重构后
        //var rootSystem = new DirectoryExtension("D:\\Downloads");
        //var file1 = new FileExtension("D:\\Downloads\\大话设计模式(带目录完整版).pdf");
        //rootSystem.AddSubNode(file1);

        //var count = rootSystem.CountNumOfFiles();
        //var size = rootSystem.CountSizeOfFile();

        // 调用组合模式
        var root = new Composite("root");
        root.Add(new Leaf("leaf A"));
        root.Add(new Leaf("leaf B"));

        var comp = new Composite("composite x");
        comp.Add(new Leaf("leaf xa"));
        comp.Add(new Leaf("leaf xb"));
        root.Add(comp);

        var comp2 = new Composite("composite x");
        comp2.Add(new Leaf("leaf xa"));
        comp2.Add(new Leaf("leaf xb"));
        root.Add(comp2);

        root.Add(new Leaf("leaf c"));

        var leaf = new Leaf("leaf d");
        root.Add(leaf);

        root.Remove(leaf);

        root.Display(2);
    }
}